package com.sparkseries.dao;

import com.sparkseries.domain.SysCompany;
import com.sparkseries.domain.SysDepartment;
import com.sparkseries.dto.SysCompanyDTO;
import org.apache.ibatis.annotations.Mapper;
import org.apache.ibatis.annotations.Param;

import java.util.List;

@Mapper
public interface SysCompanyMapper {
    /**
     * 创建企业
     *
     * @param sysCompany 企业类
     * @return Integer
     */
    Integer createCompany(SysCompany sysCompany);

    /**
     * 删除企业
     *
     * @param companyId 企业id
     * @return Integer
     */
    Integer deleteCompany(@Param("companyId") Long companyId);

    /**
     * 修改企业
     *
     * @param sysCompany 企业类
     * @return Integer
     */
    Integer updateCompany(SysCompany sysCompany);

    /**
     * 修改企业状态
     *
     * @param companyId 企业id
     * @param status    状态     0: 禁用 1: 启用
     * @return Integer
     */
    Integer updateStatus(@Param("companyId") Long companyId, @Param("status") Integer status);

    /**
     * 获取企业信息
     *
     * @param companyId 企业id
     * @return Integer
     */
    SysCompany getCompanyById(@Param("companyId") Long companyId);

    /**
     * 通过企业名获取企业信息
     *
     * @param companyName 企业名称
     * @return 企业类
     */
    SysCompany getCompanyByCompanyName(@Param("companyName") String companyName);

    /**
     * 通过id获取所有子企业id
     *
     * @param companyId 企业id
     * @return 子企业id集合
     */
    List<Long> listSubId(@Param("companyId") String companyId);

    List<SysCompany> listCompanyIdAndParentId();

    /**
     * 企业列表
     *
     * @param sysCompany 企业类
     * @param detail     查找关键词
     * @param allSubId   下级企业id
     * @return 企业类集合
     */
    List<SysCompany> listCompany(SysCompany sysCompany, @Param("detail") String detail, @Param("allSubId") List<Long> allSubId);

    /**
     * 企业添加部门
     *
     * @param departmentId 部门id数组
     * @param companyId    企业id
     * @return Integer
     */
    Integer insertDepartments(@Param("departmentId") Long departmentId, @Param("companyId") Long companyId);

    /**
     * 企业删除部门
     *
     * @param departmentId 部门id数组
     * @param companyId    企业id
     * @return Integer
     */
    Integer deleteDepartments(@Param("departmentIds") Long[] departmentId, @Param("companyId") Long companyId);

    /**
     * 查找某企业下的所有部门
     *
     * @param companyId 企业id
     * @return 部门类集合
     */
    List<SysDepartment> listDepartmentIdByCompanyId(@Param("companyId") Long companyId);

    /**
     * 通过部门ids获取企业id
     *
     * @param departmentIds 部门id集合
     * @param companyId     企业id
     * @return 部门id集合
     */
    List<Long> getCompanyIdByDepartmentIds(@Param("departmentIds") Long[] departmentIds, @Param("companyId") Long companyId);

}
